package alo.p2;

public class function {
    int n = 4;
    int[] A = new int[n];

    public static void main(String[] args) {
        int k = 8;
        function f = new function();
        //f.Binary(f.n);
        f.k_string(f.n, k);

    }


    /*
     * 计算一个正整数的阶乘
     * */
    int Fact(int n) {
        if (n == 1) {
            return 1;
        } else if (n == 0)
            return 1;
        else
            return n * Fact(n - 1);
    }

    /*
     * 打印
     * */
    int Print(int n) {
        if (n == 0)
            return 0;
        else {
            System.out.println(n);
            return Print(n - 1);
        }
    }

    /*
     * 汉诺塔问题A-B
     * A
     * B辅助
     * C
     * */
    void TowersOfHanoi(int n, char A, char B, char C) {
        //递归的基本情形
        if (n == 1) {
            System.out.println("Move disk  from peg " + A + " to peg " + B);
            return;
        }
        //把n-1个原盘移到B
        TowersOfHanoi(n - 1, A, C, B);
        //将余下的盘从A柱移到C柱
        System.out.println("Move disk  from peg " + A + " to peg " + B);
        //利用A柱为辅助柱，将B柱上的n-1个原盘移到C柱
        TowersOfHanoi(n - 1, C, B, A);
    }

    /*
     * 给定一个数组，用地柜的方法判断数组中的元素是否有序（升序）
     *
     * */
    int isArrayInSortedOrder(int[] A, int index) {
        //递归的基本情形
        if (A.length == 1) return 1;
        //递归
        return (A[index] <= A[index + 1]) ? 0 : isArrayInSortedOrder(A, index - 1);
    }

    //长度为n的二进制字符串
    void Binary(int n) {
        if (n < 1)
            Print(A);

        else {
            A[n - 1] = 0;
            Binary(n - 1);
            A[n - 1] = 1;
            Binary(n - 1);
        }
    }


    //长度为n的k进制字符串
    void k_string(int n, int k) {
        if (n < 1)
            Print(A);
        else {
            for (int i = 0; i < k; i++) {
                A[n - 1] = i;
                k_string(n - 1, k);
            }
        }
    }

    //数组打印
    void Print(int[] A) {
        for (int i : A) {
            System.out.print(i);
        }
        System.out.println();
    }


}

